<?php

require_once('constants.php');

/*
Gestion des menus du site
*/


/**
 * Obtenir un menu par son id
 * @param id: l'id du menu desiré
 * @return array assoc
 */
function menu_get_by_id($id)
{
	$sql = 'SELECT *
	        FROM Menu
	        WHERE id = '.$id.';';
	$data = sql_query($sql);
	return mysql_fetch_assoc($data);
}


/**
 * Obtenir le nom d'un menu
 */
function menu_get_name($id)
{
	$sql = 'SELECT name
	        FROM Menu
	        WHERE id = '.$id.';';
	$data = mysql_fetch_assoc(sql_query($sql));
	return $data['name'];
}


/**
 * Obtenir le bloc d'un menu (0 si c'est un bloc)
 */
function menu_get_idmenu($id)
{
	$sql = 'SELECT idMenu
	        FROM Menu
	        WHERE id = '.$id.';';
	$data = mysql_fetch_assoc(sql_query($sql));
	return $data['idMenu'];
}


/**
 * Obtenir les menus ET blocs qui ne sont pas bloqués (qui n'ont pas été créés par un développeur)
 */
function menu_get_unlocked()
{
	$sql = 'SELECT *
	        FROM Menu
	        WHERE locked = 0;';
	$data = sql_query($sql);
	return $data;
}


/**
 * Obtenir les sections ou les menus à afficher pour une section
 * @param menu: l'id de la section souhaitée (par défaut 0 = les sections)
 * @return record set
 */
function menu_get_list($menu = 0)
{
	$sql = 'SELECT *
	        FROM Menu
	        WHERE used = 1
			AND idMenu = '.$menu.'
			ORDER BY position;';
	$data = sql_query($sql);
	return $data;
}


/**
 * Obtenir les menus utilisés qui ont un lien
 */
function menu_get_used_links()
{
	$sql = 'SELECT link
	        FROM Menu
	        WHERE used = 1
			AND link <> ""			
			AND idMenu <> 0
			ORDER BY id;';
	$data = sql_query($sql);
	return $data;
}


/**
 * Obtenir toutes les sections, utilisées ou non
 */
function menu_get_all_blocs()
{
	$sql = 'SELECT *
	        FROM Menu
			WHERE idMenu = 0
			ORDER BY position;';
	$data = sql_query($sql);
	return $data;
}


/**
 * Obtenir les menus inutilisés, mais pas les blocs
 * @return record set
 */
function menu_get_unused()
{
	$sql = 'SELECT *
	        FROM Menu
	        WHERE used = 0
			AND idMenu <> 0;';
	$data = sql_query($sql);
	return $data;
}


/**
 * Obtenir l'etat (utilisé ou non) d'un menu ou bloc
 * @param id: l'id du menu ou bloc concerné
 * @return true si le menu/bloc est utilisé, false sinon
 */
function menu_is_used($id)
{
	$sql = 'SELECT used AS STATE
	        FROM Menu
	        WHERE id = '.$id.';';
	$data = mysql_fetch_assoc(sql_query($sql));
	return $data['STATE'];
}


/**
 * Savoir si un bloc a des menu utilisés associés
 * @param id: l'id du bloc concerné
 * @return true si le bloc a un ou plusieurs menus utilisés, false sinon
 */
function menu_has_active_child($id)
{
	$sql = 'SELECT COUNT(used) AS CHILDREN
	        FROM Menu
	        WHERE idMenu = '.$id.'
			AND used = 1;';
	$data = mysql_fetch_assoc(sql_query($sql));
	return $data['CHILDREN'];
}


/**
 * Supprimer un menu ou un bloc
 */
function menu_bloc_delete($id, $idmenu)
{
	$sql = 'DELETE FROM Menu
			WHERE id='.$id.';';
	$data = sql_query($sql);
	
	// mise à jour des champs "used" et "position"
	if(!$idmenu) {
		menu_update_espaceadh(-1);
		menu_set_unused_by_bloc($id);
	}
	else {
		if(!menu_has_active_child($idmenu))
			menu_set_unused($idmenu);
	}
}


/**
 * Ajouter un nouveau menu dynamique en BDD
 * @param name: le nom du nouveau menu
 * @param idmenu: le bloc/section associé
 */
function menu_add($name, $idmenu)
{
	$position = menu_get_max_position($idmenu);
	$position += 1;
	
	$sql = "INSERT INTO Menu (name, position, idMenu)
			VALUES('$name', '$position', '$idmenu');";
	$data = sql_query($sql);
}


/**
 * Ajouter un nouveau bloc (ou section) de menus en BDD
 * @param name: le nom du nouveau bloc
 * @param image: le nom du fichier image (icon) lié à ce bloc
 */
function menu_bloc_add($name, $image)
{
	$position = menu_update_espaceadh(1);
	
	$sql = "INSERT INTO Menu (name, image, position, idMenu)
			VALUES('$name', '$image', '$position', 0);";
	$data = sql_query($sql);
}


/**
 * Mettre à jour la position des 2 blocs "espace adhérent" pour qu'ils restent en dernière position
 * @param update: 1 ou -1 pour indiquer s'il faut incrémenter leur position (ajout de bloc) ou decrémenter (suppression)
 * @return la position laissée libre suite à la mise à jour
 */
function menu_update_espaceadh($update)
{
	$max_position = menu_get_max_position();
	
	menu_update_position(ESPACE_ADH_CONNECT, $max_position+$update);
	menu_update_position(ESPACE_ADH_NOT_CONNECT, $max_position+$update);
	
	return $max_position;
}


/**
 * Mettre à jour la section d'un menu
 * @param id: l'id du menu à modifier
 * @param idmenu: l'id de la nouvelle section du menu 
 */
function menu_set_section($id, $idmenu)
{
	$sql = 'UPDATE Menu
	        SET idMenu = '.$idmenu.'
	        WHERE id = '.$id.';';
	$data = sql_query($sql);
}


/**
 * Mettre à jour le lien d'un menu
 * @param id: le menu à mettre à jour
 * @param link: le lien à associer au menu
 */
function menu_set_link($id, $link)
{
	$sql = 'UPDATE Menu
	        SET link = "'.$link.'"
	        WHERE id = '.$id.';';
	$data = sql_query($sql);
}


/**
 * Mettre à jour le nom d'un menu
 */
function menu_set_name($id, $new_name)
{
	$sql = 'UPDATE Menu
	        SET name = "'.$new_name.'"
	        WHERE id = '.$id.';';
	$data = sql_query($sql);
}


/**
 * Mettre à jour un menu de la BDD pour l'indiqué "utilisé"
 * @param id: l'id du menu à mettre à jour
 */
function menu_set_used($id)
{
	$sql = 'UPDATE Menu
	        SET used = 1
	        WHERE id = '.$id.';';
	$data = sql_query($sql);
}


/**
 * Mettre à jour un menu de la BDD pour l'indiqué "inutilisé"
 * @param id: l'id du menu à mettre à jour
 */
function menu_set_unused($id)
{
	$sql = 'UPDATE Menu
	        SET used = 0,
			link = NULL
	        WHERE id = '.$id.';';
	$data = sql_query($sql);
}


/**
 * Mettre des menus de la BDD pour les indiquer "inutilisés"
 * @param idmenu: l'id du bloc auquel sont liés les menus
 */
function menu_set_unused_by_bloc($idmenu)
{
	$sql = 'UPDATE Menu
	        SET used = 0,
			link = NULL
	        WHERE idMenu = '.$idmenu.';';
	$data = sql_query($sql);
}


/**
 * Met à jour le champs "used" des menus lorsque le menu d'un contenu est modifié
 * @param new_menu: le nouveau menu du contenu
 * @param old_menu: l'ancien menu du contenu 
 */
function menu_update_used($new_menu, $old_menu)
{
	menu_set_used($new_menu);
	menu_set_unused($old_menu);
}


/**
 * Met à jour le champs "position" d'un menu
 * @param id: l'id du menu à mettre à jour
 * @param position: la nouvelle position du menu
 * @param idmenu: l'id de la section à laquelle le menu est lié (0 par défaut)
 */
function menu_update_position($id, $position, $idmenu = 0)
{
	$sql = 'UPDATE Menu
	        SET position = '.$position.',
				idMenu = '.$idmenu.'
	        WHERE id = '.$id.';';
	$data = sql_query($sql);
}


/**
 * Calculer la position occupée la plus élevée pour un menu ou un bloc
 * @param id: l'id du bloc (section) concerné s'il s'agit d'un menu
 * @return numéro de la prochaine position
 */
function menu_get_max_position($id = 0)
{
	$sql = 'SELECT MAX(position) AS MAX
	        FROM Menu
	        WHERE idMenu = '.$id.';';
	$position = mysql_fetch_assoc(sql_query($sql));
	return $position['MAX'];
}


/**
 * Regénérer le fichier /sitemap.txt
 * @return true si le génération a réussi, false sinon
 */
function menu_generate_sitemap()
{
	$sitemap = fopen(SITEMAP, 'w');
	if($sitemap) {
		fputs($sitemap, WEBLINK."\n");
		$links = menu_get_used_links();
		while($row = mysql_fetch_assoc($links)) {
			fputs($sitemap, WEBLINK.$row['link']."\n");
		}
		fclose($sitemap);
		return true;
	}
	else return false;
}

